//
//  Intervento.m
//  InterventixApp
//
//  Created by Diego on 29/12/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "Intervento.h"
#import "SBJson.h"
#import "Utente.h"
#import "Cliente.h"
#import "DateUtil.h"
#import "DettaglioIntervento.h"


@implementation Intervento



-(NSMutableDictionary *) convertToDictionary{
    
    
    NSMutableDictionary *diz = [NSMutableDictionary dictionaryWithCapacity:0];
    //ID Intervento
    [diz setObject:self.idIntervento    forKey:@"idintervento"];
    
    // Cancellato
    if(self.cancellato){
        [diz setObject:@true            forKey:@"cancellato"];
    }else{
        [diz setObject:@false           forKey:@"cancellato"];
    }
    
    if(self.cestinato){
        [diz setObject:@true            forKey:@"cestinato"];
    }else{
        [diz setObject:@false           forKey:@"cestinato"];
    }
    if(self.chiuso){
        [diz setObject:@true            forKey:@"chiuso"];
    }else{
        [diz setObject:@false           forKey:@"chiuso"];
    }
    [diz setObject:self.cliente.idCliente forKey:@"cliente"];
    if(self.conflitto){
        [diz setObject:@true            forKey:@"conflitto"];
    }else{
        [diz setObject:@false           forKey:@"conflitto"];
    }
    [diz setObject:self.costoAccessori  forKey:@"costoaccessori"];
    [diz setObject:self.costoComponenti forKey:@"costocomponenti"];
    [diz setObject:self.costoManodopera forKey:@"costomanodopera"];
    
    
    [diz setObject:[DateUtil NSDateToNSNumber:self.dataora] forKey:@"dataora"];
    
    //Array dei dettagli
    NSMutableArray *arrDI = [[NSMutableArray alloc] initWithCapacity:[self.dettagli count]];
    for(DettaglioIntervento *di in self.dettagli){
        [arrDI addObject:[di convertToDictionary]];
    }
    [diz setObject:arrDI forKey:@"dettagliintervento"];
    
    
    if(self.firma != nil){
        [diz setObject:self.firma forKey:@"firma"];
    }else{
        [diz setObject:[NSNull null] forKey:@"firma"];
    }
    [diz setObject:self.importo         forKey:@"importo"];
    [diz setObject:self.iva             forKey:@"iva"];
    [diz setObject:self.modalita        forKey:@"modalita"];
    
    if(self.motivo != nil){
        [diz setObject:self.motivo forKey:@"motivo"];
    }else{
        [diz setObject:[NSNull null] forKey:@"motivo"];
    }
    
    if(self.nominativo != nil){
        [diz setObject:self.nominativo forKey:@"nominativo"];
    }else{
        [diz setObject:[NSNull null] forKey:@"nominativo"];
    }
    
    // NOTE
    if(self.note != nil){
        [diz setObject:self.note forKey:@"note"];
    }else{
        [diz setObject:[NSNull null] forKey:@"note"];
    }
    // PRODOTTO
    if(self.prodotto != nil){
        [diz setObject:self.prodotto forKey:@"prodotto"];
    }else{
        [diz setObject:[NSNull null] forKey:@"prodotto"];
    }
    
    [diz setObject:self.revisione forKey:@"revisione"];
    
    if(self.riffattura != nil){
        [diz setObject:self.riffattura forKey:@"riffattura"];
    }else{
        [diz setObject:[NSNull null] forKey:@"riffattura"];
    }
    
    
    if(self.rifscontrino != nil){
        [diz setObject:self.rifscontrino      forKey:@"rifscontrino"];
    }else{
        [diz setObject:[NSNull null]    forKey:@"rifscontrino"];
    }
    
    // Saldato
    if(self.saldato){
        [diz setObject:@true            forKey:@"saldato"];
    }else{
        [diz setObject:@false           forKey:@"saldato"];
    }
    
    [diz setObject:self.utente.idutente forKey:@"tecnico"];
    
    
    [diz setObject:self.tipologia       forKey:@"tipologia"];
    [diz setObject:self.totale          forKey:@"totale"];
    return diz;
}

-(void) readFromMutableDictionary:(NSMutableDictionary *) diz{
    
    
    self.idIntervento = [diz objectForKey:@"idintervento"];
    
    self.cancellato     = [[diz objectForKey:@"cancellato"] boolValue];
    self.cestinato      = [[diz objectForKey:@"cestinato"] boolValue];
    self.chiuso     = [[diz objectForKey:@"chiuso"] boolValue];
    self.saldato      = [[diz objectForKey:@"saldato"] boolValue];
    self.conflitto     = [[diz objectForKey:@"conflitto"] boolValue];
    
    self.costoAccessori = [diz objectForKey:@"costoaccessori"];
    self.costoComponenti = [diz objectForKey:@"costocomponenti"];
    self.costoManodopera = [diz objectForKey:@"costomanodopera"];
    self.iva = [diz objectForKey:@"iva"];
    self.importo = [diz objectForKey:@"importo"];
    self.totale = [diz objectForKey:@"totale"];
    
    
    self.tipologia = [diz objectForKey:@"tipologia"];
    self.modalita = [diz objectForKey:@"modalita"];
    self.prodotto = [diz objectForKey:@"prodotto"];
    self.motivo = [diz objectForKey:@"motivo"];
    
    
    self.nominativo = [diz objectForKey:@"nominativo"];
    self.note = [diz objectForKey:@"note"];
    self.riffattura = [diz objectForKey:@"rifffattura"];
    self.rifscontrino = [diz objectForKey:@"rifscontrino"];
    
    self.revisione = [diz objectForKey:@"revisione"];
    self.firma = [diz objectForKey:@"firma"];
    self.dataora = [DateUtil LongToNSDate:[[diz objectForKey:@"dataora"] longLongValue]];
    
    self.cliente = [[Cliente alloc] init];
    NSString *ic = [diz objectForKey:@"cliente"];
    self.cliente.idCliente = [NSNumber numberWithInt:[ic intValue]];
    [self.cliente load];
    
    
    self.utente = [[Utente alloc] init];
    NSString *i = [diz objectForKey:@"tecnico"];
    self.utente.idutente = [NSNumber numberWithInt:[i intValue]];
    [self.utente load];
    
    
    //Array
    self.dettagli = [NSMutableArray arrayWithCapacity:0];
    for(NSDictionary *d in [diz objectForKey:@"dettagliintervento"]){
        DettaglioIntervento *di = [[DettaglioIntervento alloc] init];
        [di readFromDictionary:d];
        [self.dettagli addObject:di];
    }
    
    
    self.inuse = false;
}

-(void) readFromDictionary:(NSDictionary *) diz{
    self.idIntervento = [diz objectForKey:@"idintervento"];
    
    self.cancellato     = [[diz objectForKey:@"cancellato"] boolValue];
    self.cestinato      = [[diz objectForKey:@"cestinato"] boolValue];
    self.chiuso     = [[diz objectForKey:@"chiuso"] boolValue];
    self.saldato      = [[diz objectForKey:@"saldato"] boolValue];
    self.conflitto     = [[diz objectForKey:@"conflitto"] boolValue];
    
    self.costoAccessori = [diz objectForKey:@"costoaccessori"];
    self.costoComponenti = [diz objectForKey:@"costocomponenti"];
    self.costoManodopera = [diz objectForKey:@"costomanodopera"];
    self.iva = [diz objectForKey:@"iva"];
    self.importo = [diz objectForKey:@"importo"];
    self.totale = [diz objectForKey:@"totale"];
    
    
    self.tipologia = [diz objectForKey:@"tipologia"];
    self.modalita = [diz objectForKey:@"modalita"];
    self.prodotto = [diz objectForKey:@"prodotto"];
    self.motivo = [diz objectForKey:@"motivo"];
    
    
    self.nominativo = [diz objectForKey:@"nominativo"];
    
    self.note = [diz objectForKey:@"note"];
    self.riffattura = [diz objectForKey:@"rifffattura"];
    self.rifscontrino = [diz objectForKey:@"rifscontrino"];
    
    self.revisione = [diz objectForKey:@"revisione"];
    self.firma = [diz objectForKey:@"firma"];
    self.dataora = [DateUtil LongToNSDate:[[diz objectForKey:@"dataora"] longLongValue]];
    
    self.cliente = [[Cliente alloc] init];
    NSString *ic = [diz objectForKey:@"cliente"];
    self.cliente.idCliente = [NSNumber numberWithInt:[ic intValue]];
    [self.cliente load];
    
    
    self.utente = [[Utente alloc] init];
    NSString *i = [diz objectForKey:@"tecnico"];
    self.utente.idutente = [NSNumber numberWithInt:[i intValue]];
    [self.utente load];
    
    
    //Array
    self.dettagli = [NSMutableArray arrayWithCapacity:0];
    for(NSDictionary *d in [diz objectForKey:@"dettagliintervento"]){
        DettaglioIntervento *di = [[DettaglioIntervento alloc] init];
        [di readFromDictionary:d];
        [self.dettagli addObject:di];
    }
    
     self.inuse = false;
}

-(BOOL) check{
    
    
    return TRUE;
}


-(double) getHourAllDett{
    double d = 0;
    
    for (DettaglioIntervento *di in self.dettagli) {
        d+=([di.fine timeIntervalSinceDate:di.inizio]/60/60);
    }
    
    return d;
}













-(unsigned long long) hashcode{
    unsigned long long h = (self.saldato + self.cancellato + self.cestinato + self.chiuso + self.conflitto)*33;
    h += [self.costoAccessori hash] + 881 + ([self.costoAccessori doubleValue] * 251);
    h += [self.costoComponenti hash]+ 479 + ([self.costoComponenti doubleValue] * 193);
    h += [self.costoManodopera hash]+ 997 + ([self.costoManodopera doubleValue] * 101);
    h += [self.iva hash] + 88;
    h += [self.importo hash]  + 99;
    h += [self.totale hash]+ 67;
    h += [self.tipologia hash];
    h += [self.modalita hash];
    h += [self.prodotto hash];
    h += [self.motivo hash];
    h += [self.nominativo hash];
    h += [self.note hash];
    h += [self.riffattura hash];
    h += [self.rifscontrino hash];
    h += [self.revisione hash]*21;
    h += [self.firma hash];
    h += [self.dataora hash]*11;
    
    h += [self.utente hashcode];
    h += [self.cliente hashcode];
    for(DettaglioIntervento *di in self.dettagli){
        h += [di hashcode];
    }
    
    unsigned long long hh = abs(h);
    return hh;
}

@end
